﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace BoletoElectronicoDesktop.Login
{
    public partial class FormLogin : Form
    {
        //variable para salir del sistema
        public int salirSistema = 1;
        
        //strings de usuario y contraseña
        public string usuario = "";
        public string contraseña = "";

        //guarda cantidad de intentos fallidos
        public int fallidos;


        public FormLogin()
        {
            InitializeComponent();
        }

        private void FormLogin_Load(object sender, EventArgs e)
        {
            //carga la cantidad de intentos fallidos a cero
            fallidos = 0;
        }



        private void btnSalir_Click(object sender, EventArgs e)
        {
            salirSistema = 0;
            Close();
           

        }

        private void btnAcceder_Click(object sender, EventArgs e)
        {
            usuario = txtUsuario.Text;
            contraseña = txtContraseña.Text;

            //valido que el usuario ingrese algo en el nombre de usuario y contraseña
            if ((usuario == "") || (contraseña == ""))
            {
                MessageBox.Show("Por favor complete los campos de nombre de usuario y contraseña", "Información");
            }
            else //el usuario ingresó nombre de usuario y contraseña
            {
               //valido que exista el usuario
                int existe = LoginDAO.ExisteUsuario(usuario);
                if (existe == 0) //el usuario no existe
                {
                    MessageBox.Show("El nombre de usuario es incorrecto");
                    txtUsuario.Text = "";
                    txtContraseña.Text = "";
                }
                else //el usuario existe 
                {
                    //valido que el usuario esté habilitado
                    int campoHabilitado = LoginDAO.UsuarioHabilitado(usuario);
                    if (campoHabilitado != 3)
                    {

                       //convierto la contraseña ingresada en su valor hash
                        string contraseñaConHash = Funciones.ObtenerContraseñaHash(contraseña);

                        //obtengo la contraseña del usuario y la comparo con la ingresada
                        string contraseñaBase = LoginDAO.ObtenerContraseña(usuario);
                        if (string.Compare(contraseñaBase, contraseñaConHash) == 0) //las contraseñas coinciden
                        {
                            MessageBox.Show("Login realizado con éxito, bienvenido!");
                            //cargo la variable del username para q la puedan usar otros forms
                            Funciones.username = usuario;
                            fallidos = 0;
                            //actualizo la cantidad de intentos a cero
                            LoginDAO.ActualizarHabilitado(usuario,fallidos.ToString());
                            Close();
                        }
                        else //la contraseña es incorrecta => hay que ver cantidad de intentos
                        {
                            //incremeto los intentos fallidos 
                             campoHabilitado++;
                            if(campoHabilitado<3)
                            {
                                MessageBox.Show("Contraseña incorrecta. Le quedan " + (3 - campoHabilitado) + " intentos. Si los agota será inhabilitado.");
                                LoginDAO.ActualizarHabilitado(usuario, campoHabilitado.ToString());
                            }
                            else //3 intentos fallidos completos
                            {
                                                                
                                LoginDAO.ActualizarHabilitado(usuario, campoHabilitado.ToString());
                                salirSistema = 0;
                                MessageBox.Show("Ha ingresado incorrectamente la contraseña 3 veces. Quedará inhabilitado y el programa se cerrará. Contacte al administrador");
                                Close();
                            }
                        }

                    }
                    else //usuario inhabilitado
                    {
                        MessageBox.Show("El usuario se encuentra inhabilitado. Se cerrará la aplicación.Contacte al administrador.");
                        //cierro la aplicación
                        salirSistema = 0;
                        Close();
 
                    }
                } //fin else existeUsuario
                
                
            }//fin de haber ingresado algo en usuario y contraseña

           
        } //fin metodo boton Acceder

        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            MessageBox.Show("Por favor ingrese un nombre válido", "Información");
        }

        private void lblpassword_Click(object sender, EventArgs e)
        {
        }
    }
}
